01A. 数字系统与二进制编码基础与运算
1. 数字信号与数字系统基础
- 信号 (Signal): 用于表示和传递信息的物理量。
- 模拟信号 (Analog Signal): 幅度和频率连续变化的波形。
- 数字信号 (Digital Signal): 只有
ON(1) 和OFF(0) 两种状态的离散波形。
- 比特 (Bit): 二进制数字 (binary digit) 的缩写,是信息的基本单位。
1: 代表高电平 (HIGH) 或真 (TRUE)。0: 代表低电平 (LOW) 或假 (FALSE)。
- 逻辑电平 (Logic Levels): 在电路中,用一个电压范围来表示
0和1,例如 为低电平, 为高电平。
2. 核心数制及其转换
数字系统中常用的数制包括十进制 (Decimal, base-10)、二进制 (Binary, base-2)、八进制 (Octal, base-8) 和十六进制 (Hexadecimal, base-16)。
2.1. 任意进制 (Radix-r) 转换为十进制
核心方法:按权展开求和 (Positional Number System)。 一个具有 位整数和 位小数的 进制数,其值为: 其中 是该数位上的数字, 是基数 (Radix),小数点左侧第一位是 ,右侧第一位是 。
- 最高有效位 (Most-Significant Digit, MSD): 最左边的数字。
- 最低有效位 (Least-Significant Digit, LSD): 最右边的数字。
【用例】 将二进制数 转换为十进制:
2.2. 十进制转换为任意进制 (Radix-r)
核心方法:整数部分和小数部分分开处理。
-
整数部分:除基取余法
- 将十进制整数反复除以目标基数 。
- 每次的余数作为新数制的一位,直到商为 0。
- 注意:将余数从下往上(从最后一次的余数到第一次的余数)排列,即为转换结果(从 MSB 到 LSB)。
-
小数部分:乘基取整法
- 将十进制小数反复乘以目标基数 。
- 每次的整数部分作为新数制的一位,取剩下的小数部分继续。
- 注意:将整数从上往下(从第一次的整数到最后一次的整数)排列,即为转换结果(从 MSB 到 LSB)。
【用例】 将十进制数 转换为二进制:
-
整数部分 (35):
- (LSB)
- (MSB)
- 结果 (从下往上读):
-
小数部分 (0.375):
- 整数部分为
0(MSB) - 整数部分为
1 - 整数部分为
1(LSB) - 结果 (从上往下读):
- 整数部分为
-
最终结果:
2.3. 二、八、十六进制间的快速转换
核心方法:利用 和 的关系进行分组转换。
-
二进制 八进制:
- 以小数点为界,整数部分向左、小数部分向右,每 3 位二进制数分为一组,不足 3 位的用 0 补齐。
- 每组独立转换为一位八进制数。
-
二进制 十六进制:
- 以小数点为界,整数部分向左、小数部分向右,每 4 位二进制数分为一组,不足 4 位的用 0 补齐。
- 每组独立转换为一位十六进制数。
-
八进制 十六进制:
- 先转换为二进制作为中间步骤。
【用例】 将 转换为八进制和十六进制:
3. 二进制运算与补码
3.1. 二进制加减法
- 加法: 与十进制加法类似,逢二进一。
- 减法: 与十进制减法类似,需要向高位借位。但电路实现复杂。
3.2. 补码 (Complement)
核心目的:将减法运算转换为加法运算,从而简化计算机硬件设计。
| 进制 | 类型 | 中文名 | 定义 ( 为数值, 为位数, 为基数) | 快速求法 |
|---|---|---|---|---|
| 二进制 | (r-1)'s | 反码 (1's Complement) | 各位取反 (0 变 1,1 变 0) | |
| r's | 补码 (2's Complement) | 反码加一 或 从右向左找到第一个 1,该 1 及其右边不变,左边各位取 反 | ||
| 十进制 | (r-1)'s | 9's Complement | 用 个 9 减去原数 | |
| r's | 10's Complement | 9's Complement 加一 |
【重点】二的补码 (2's Complement) 求法
对于二进制数 10110000:
- 方法一 (反码加一):
- 反码:
01001111 - 加一:
01001111 + 1 = 01010000
- 反码:
- 方法二 (保留首个 1):
- 从右向左找到第一个
1:1011**0000** - 该
1及其右边的位保持不变:....**0000**(错误,应为10000) - 正确应为:从右向左,遇到的第一个
1及其右边的所有位保持不变,该1左边的所有位取反。 10110000-> 从右向左第一个 1 在第 5 位。10110000->10000不变,101取反为010。- 结果:
01010000
- 从右向左找到第一个
3.3. 使用补码进行减法
核心算法:
- 前提: 和 必须有相同的位数,不足则在高位补 0。
- 步骤:
- 求减数 的补码(通常是 2's complement)。
- 被减数 加上 的补码。
- 根据结果判断:
- 如果产生最高位进位 (End Carry),则舍弃该进位,结果为正。
- 如果没有最高位进位,则结果为负,其值为对当前结果再次求补码。
【用例】 使用 7 位二进制数和 2's complement 计算 和 ,其中 , 。
-
计算 ():
- 的 2's complement:
- 的反码:
0111100 - 的补码:
0111101
- 的反码:
- 相加:
- 结果:有最高位进位
1,舍弃。结果为正,即 。
- 的 2's complement:
-
计算 ():
- 的 2's complement:
- 的反码:
0101011 - 的补码:
0101100
- 的反码:
- 相加:
- 结果:无最高位进位。结果为负,其大小需对
1101111再次求 2's complement。1101111的反码:0010000- 加一:
0010001
- 最终结果为 。
- 的 2's complement:
4. 带符号二进制数表示法
为了在二进制中表示正负数,通常将最高有效位 (MSB) 作为符号位:
0: 正数1: 负数
【重点】三种带符号数表示法的对比 (以 8 位为例)
| 表示法 | 正数表示 (+X) | 负数表示 (-X) | 特点 |
|---|---|---|---|
| 原码 (Sign-Magnitude) | 符号位为 0,其余位为数值的 绝对值。 | 符号位为 1,其余位为数值的绝对值。 | - 直观,但加减法规则复杂。 - 有两个 0 的表示 ( +0 和 -0)。 |
| 反码 (Signed-1's Complement) | 与原码相同。 | 符号位为 1,其余位为数值绝对值的反码。 | - 加减法比原码简单。 - 仍有两个 0 的表示 ( +0 和 -0)。 |
| 补码 (Signed-2's Complement) | 与原码相同。 | 符号位为 1,其余位为数值绝对值的补码。 | - 加减法统一,硬件实现最简单。 - 只有一个 0 的表示。 - 表示范围比原码和反码多一个负数。 |
【用例】 用 8 位二进制表示
- 正数 : 三种表示法都相同
01101001
- 负数 :
- 原码:
11101001(符号位变 1) - 反码:
10010110(数值位1101001取反) - 补码:
10010111(反码10010110加 1)
- 原码:
为什么现代计算机普遍使用补码?
| 特性 | 原码 | 反码 | 补码 |
|---|---|---|---|
| 加法运算 | 规则复杂 | 规则复杂 (需循环进位) | 规则统一,可直接相加 |
| 0 的表示 | 0000 和 1000 | 0000 和 1111 | 唯一 0000 |
| N 位表示范围 |
5. 其他二进制编码
5.1. BCD 码 (Binary-Coded Decimal)
- 定义: 用 4 位二进制数来表示一位十进制数 (0-9)。也称 8421 码。
- 特点:
0011 1001 0110代表十进制数396。- 4 位二进制组合
1010到1111是无效的 BCD 码。
- BCD 加法:
- 按二进制加法规则对位。
- 如果任意一组 4 位数的结果大于 9,或者产生了向高一组的进位,则该组需要修正。
- 修正方法: 对该组加 6 (即
0110)。- 原因: 二进制加法是逢 16 进位,而 BCD 码需要逢 10 进位,加 6 是为了跳过 6 个无效状态,从而实现正确的进位。
【用例】 计算 的 BCD 码
5.2. 格雷码 (Gray Code)
- 特点: 相邻两个数值之间只有一位二进制数不同。
- 应用: 减少数据转换过程中的瞬时错误、低功耗设计、模拟数据编码。
5.3. ASCII 码
- 全称: American Standard Code for Information Interchange (美国信息交换标准代码)。
- 用途: 用一个唯一的二进制数(通常是 7 位)表示数字、字母、标点符号和控制字符,共 128 个。
5.4. 奇偶校验码 (Error-Detecting Code)
- 目的: 检测数据在传输或存储过程中是否发生错误。
- 方法: 在原始数据上附加一位校验位 (Parity Bit)。
- 偶校验 (Even Parity): 附加一位,使得整个编码中
1的个数为偶数。 - 奇校验 (Odd Parity): 附加一位,使得整个编码中
1的个数为奇数。
- 偶校验 (Even Parity): 附加一位,使得整个编码中
- 局限性: 只能检测出奇数个位的错误,无法检测出偶数个位的错误,也无法纠正错误。
6. 二进制逻辑入门
- 定义: 处理只有两个值(
0和1)的变量的逻辑体系。 - 基本逻辑运算:
| 运算 | 符号 | 描述 | 逻辑门 | 真值表 (A, B 为输入, Y 为输出) |
|---|---|---|---|---|
| 与 (AND) | 或 省略 | 所有输入为 1,输出才为 1 | 与门 | A=0, B=0, Y=0A=0, B=1, Y=0A=1, B=0, Y=0A=1, B=1, Y=1 |
| 或 (OR) | 任一输入为 1,输出就为 1 | 或门 | A=0, B=0, Y=0A=0, B=1, Y=1A=1, B=0, Y=1A=1, B=1, Y=1 | |
| 非 (NOT) | 或 | 输入与输出相反 | 非门 | A=0, Y=1A=1, Y=0 |